A programmable logic device (PLD) is a configurable integrated circuit used to implement a custom logic function. Examples of PLDs include devices such as, but not limited to, a programmable logic array (PLA), a field programmable gate array (FPGA), and an erasable and complex PLD.
A basic building block of a PLD includes a logic element that is capable of performing logic functions on a number of input variables. Conventional PLDs combine large numbers of logic elements through an array of programmable interconnects to facilitate implementation of complex logic functions. PLDs are popular because of their combination of versatility and low cost.
The logic elements may be arranged in groups of eight, for example, to form larger functional blocks such as logic array blocks (LABs). The LABs are arranged in a two-dimensional array and are programmably connectable to each other. Conductors (lines or wires) in a PLD are used to route signals from one location on the PLD to another location on the PLD. Each functional block includes multiplexers and drivers that are used to drive signals between blocks.
More specifically, LAB conductors carry signals generated outside the LAB, local conductors carry signals generated by logic elements within the LAB, logic element input multiplexers programmably select inputs from the LAB conductors and local conductors and provide these as inputs to the logic elements that constitute the LAB, and logic element output multiplexers output signals of the logic elements to the local conductors or to the inputs of multiplexers that, together with corresponding drivers, drive the conductors outside the LAB. Other input multiplexers route signals from routing channels at the periphery of the LABs to the LAB conductors. Output multiplexers and drivers drive the outputs of a LAB (e.g., the outputs of the logic elements within the LAB) through the channels outside the LAB.